package dao;

import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import modelo.Recibos;
import util.JPAUtil;

/**
 *
 * @author gilberto.costa 28/03/2012 16:46
 */
public class ReciboDao {

    public static List<Recibos> retornaRecibos() {
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createQuery("FROM Recibos order by id asc");
        List<Recibos> lista = q.getResultList();
        em.close();
        return lista;
    }

    public static Recibos retornaRecibosPorId(Long id) {
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createQuery("FROM Recibos WHERE id = ?");
        q.setParameter(1, id);
        Recibos retorno;
        try {
            retorno = (Recibos) q.getSingleResult();
            em.close();
            return retorno;
        } catch (javax.persistence.NoResultException e) {
            em.close();
            return null;
        }
    }

    public static Recibos retornaRecibosPorIdAndCliente(Long idRecibo, Long idCliente) {
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createQuery("FROM Recibos c WHERE c.id = ? "
                + "AND c.id_cli.id_cliente = ?");
        q.setParameter(1, idRecibo);
        q.setParameter(2, idCliente);
        Recibos retorno;
        try {
            retorno = (Recibos) q.getSingleResult();
            em.close();
            return retorno;
        } catch (javax.persistence.NoResultException e) {
            em.close();
            return null;
        }
    }

    public static Recibos verificaExistenciaDeRecibosParaMesmoVencimento(Date vencimento, Long id_cliente) {
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createQuery("FROM Recibos "
                + "WHERE datavencimento = ? "
                + "AND cliente.id_cliente = ?");
        q.setParameter(1, vencimento);
        q.setParameter(2, id_cliente);
        Recibos retorno;
        try {
            retorno = (Recibos) q.getSingleResult();
            em.close();
            return retorno;
        } catch (javax.persistence.NoResultException e) {
            em.close();
            return null;
        }
    }

    public static List<Recibos> retornaRecibosPorClienteAndVencimento(Long cliente, Date vencimento) {
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createQuery("FROM Recibos "
                + "WHERE cliente.id_cliente = ? "
                + "AND datavencimento = ?");
        q.setParameter(1, cliente);
        q.setParameter(2, vencimento);
        List<Recibos> lista = q.getResultList();
        em.close();
        return lista;
    }

    public static List<Recibos> retornaRecibosPorClienteAndVencimento(Long cliente) {
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createQuery("FROM Recibos "
                + "WHERE cliente.id_cliente = ?");
        q.setParameter(1, cliente);
        List<Recibos> lista = q.getResultList();
        em.close();
        return lista;
    }

    public static List<Recibos> retornaRecibosPorClienteAndVencimento(Date venciment) {
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createQuery("FROM Recibos "
                + "WHERE datavencimento = ?");
        q.setParameter(1, venciment);
        List<Recibos> lista = q.getResultList();
        em.close();
        return lista;
    }

    public static List<Recibos> retornaRecibosUsandoIN(String ids_separadosPorVirgula) {
        //ganbiarra para passar as Strings para Long --- FOR
        String sql = "SELECT c FROM Recibos c WHERE c.id in (";
        String concatena = ",";
        Integer cont = 0;
        String[] teste = ids_separadosPorVirgula.split(",");
        for (int x = 0; x < teste.length; x++) {
            if (cont == 0) {
                sql = sql + teste[x];
            } else {
                sql = sql + concatena + teste[x];
            }
            cont++;
        }
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createQuery(sql + ")");//) --> fecha a select
        List<Recibos> lista = q.getResultList();
        em.close();
        return lista;
    }
}
